#include "xdata.h"

void *XData::alloc(long long memSize)
{
    if (memSize < 0 || (!memPool_)) {
        return nullptr;
    }
    data_ = memPool_->allocate(memSize);
    memSize_ = memSize;
    size_ = memSize;

    return data_;
}

void XData::setSize(long long size)
{
    size_ = size;
}

void *XData::data()
{
    return data_;
}

bool XData::end()
{
    return end_;
}

void XData::setEnd(bool end)
{
    end_ = end;
}

XData::~XData()
{
    if ((!data_) || (!memPool_)) {
        return;
    }
    memPool_->deallocate(data_, memSize_);
    data_ = nullptr;
    size_ = 0;
    memSize_ = 0;
}

std::shared_ptr<XData> XData::make_data(
    std::shared_ptr<std::pmr::memory_resource> pool)
{
    std::shared_ptr<XData> ptr = std::make_shared<XData>(XData{});
    ptr->memPool_ = pool;
    return ptr;
}

long long XData::size()
{
    return size_;
}